﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using BookExpress.DB;
using System.Data.SqlClient;

namespace BookExpress.Funcionario
{
    public class Funcionario
    {
        private int funCod;
        private string funNome;
        private string funDataNascimento;
        private string funSexo;
        private string funRG;
        private string funCPF;
        private string funTipoLogradouro;
        private string funLogradouro;
        private string funNumero;
        private string funComplemento;
        private string funBairro;
        private string funCidade;
        private string funUF;
        private string funCEP;
        private string funTelefone;
        private string funCelular;
        private string funEmail;
        private string funCargo;
        private int funComissao;
        private string funLogin;
        private string funSenha;

        public int FunCod
        {
            get { return funCod; }
            set { funCod = value; }
        }

        public string FunNome
        {
            get { return funNome; }
            set { funNome = value; }
        }

        public string FunDataNascimento
        {
            get { return funDataNascimento; }
            set { funDataNascimento = value; }
        }

        public string FunSexo
        {
            get { return funSexo; }
            set { funSexo = value; }
        }

        public string FunRG
        {
            get { return funRG; }
            set { funRG = value; }
        }

        public string FunCPF
        {
            get { return funCPF; }
            set
            {
                funCPF = value; //implementar validação CPF
            }
        }

        public string FunTipoLogradouro
        {
            get { return funTipoLogradouro; }
            set { funTipoLogradouro = value; }
        }

        public string FunLogradouro
        {
            get { return funLogradouro; }
            set { funLogradouro = value; }
        }

        public string FunNumero
        {
            get { return funNumero; }
            set { funNumero = value; }
        }

        public string FunComplemento
        {
            get { return funComplemento; }
            set { funComplemento = value; }
        }

        public string FunBairro
        {
            get { return funBairro; }
            set { funBairro = value; }
        }

        public string FunCidade
        {
            get { return funCidade; }
            set { funCidade = value; }
        }

        public string FunUF
        {
            get { return funUF; }
            set { funUF = value; }
        }

        public string FunCEP
        {
            get { return funCEP; }
            set { funCEP = value; }
        }

        public string FunTelefone
        {
            get { return funTelefone; }
            set { funTelefone = value; }
        }

        public string FunCelular
        {
            get { return funCelular; }
            set { funCelular = value; }
        }

        public string FunEmail
        {
            get { return funEmail; }
            set { funEmail = value; }
        }

        public string FunCargo
        {
            get { return funCargo; }
            set { funCargo = value; }
        }

        public int FunComissao
        {
            get { return funComissao; }
            set { funComissao = value; }
        }

        public string FunLogin
        {
            get { return funLogin; }
            set { funLogin = value; }
        }

        public string FunSenha
        {
            get { return funSenha; }
            set { funSenha = value; }
        }

        public Funcionario consultarFuncionario(int cod)
        {
            ServicosDB sql = new ServicosDB();
            string strConsultar = "SELECT * FROM FUNCIONARIO WHERE funCod = " + cod;
            SqlDataReader rsFuncionario;

            try
            {
                rsFuncionario = sql.recordSet(strConsultar);
            }
            catch (SqlException)
            {
                throw new Exception("Falha na conexão com o banco de dados.");
            }

            if (rsFuncionario.HasRows)
            {
                while (rsFuncionario.Read())
                {
                    Funcionario f = new Funcionario();
                    f.FunCod = (int)rsFuncionario["funCod"];
                    f.FunNome = rsFuncionario["funNome"].ToString();
                    f.FunDataNascimento = rsFuncionario["funDataNascimento"].ToString();
                    f.FunSexo = rsFuncionario["funSexo"].ToString();
                    f.FunRG = rsFuncionario["funRG"].ToString();
                    f.FunCPF = rsFuncionario["funCPF"].ToString();
                    f.FunTipoLogradouro = rsFuncionario["funTipoLogradouro"].ToString();
                    f.FunLogradouro = rsFuncionario["funLogradouro"].ToString();
                    f.FunNumero = rsFuncionario["funNumero"].ToString();
                    f.FunComplemento = rsFuncionario["funComplemento"].ToString();
                    f.FunBairro = rsFuncionario["funBairro"].ToString();
                    f.FunCidade = rsFuncionario["funCidade"].ToString();
                    f.FunUF = rsFuncionario["funUF"].ToString();
                    f.FunCEP = rsFuncionario["funCEP"].ToString();
                    f.FunTelefone = rsFuncionario["funTelefone"].ToString();
                    f.FunCelular = rsFuncionario["funCelular"].ToString();
                    f.FunEmail = rsFuncionario["funEmail"].ToString();
                    f.FunCargo = rsFuncionario["funCargo"].ToString();
                    f.FunComissao = (int)rsFuncionario["funComissao"];
                    f.FunLogin = rsFuncionario["funLogin"].ToString();
                    f.FunSenha = rsFuncionario["funSenha"].ToString();
                    return f;
                }
            }
            else
            {
                throw new Exception("Funcionário não encontrado.");
            }

            return null;
        }

        public void atualizarFuncionario(int cod, string nome, string dataNascimento, string sexo, string rg, string cpf, string tipoLogradouro, string logradouro, string numero, string complemento, string bairro, string cidade, string uf, string cep, string telefone, string celular, string email, string cargo, int comissao, string login)
        {
            ServicosDB sql = new ServicosDB();
            string strAtualizar = "UPDATE FUNCIONARIO SET funNome = '" + nome + "', funDataNascimento = '" + dataNascimento + "', funSexo = '" + sexo + "', funRG = '" + rg + "', funCPF = '" + cpf + "', funTipoLogradouro = '" + tipoLogradouro
                + "', funLogradouro = '" + logradouro + "', funNumero = '" + numero + "', funComplemento = '" + complemento + "', funBairro = '" + bairro
                + "', funCidade = '" + cidade + "', funUF = '" + uf + "', funCEP = '" + cep + "', funTelefone = '" + telefone + "', funCelular = '" + celular + "', funEmail = '" + email
                + "', funCargo = '" + cargo + "', funComissao = " + comissao + ", funLogin = '" + login + "' WHERE funCod = " + cod;

            try
            {
                sql.executar(strAtualizar);
            }
            catch (SqlException)
            {
                throw new Exception("Falha na conexão com o banco de dados.");
            }
        }

        public void excluirFuncionario(int cod)
        {
            ServicosDB sql = new ServicosDB();
            string strExcluir = "DELETE FROM FUNCIONARIO WHERE funCod = " + cod;

            try
            {
                sql.executar(strExcluir);
            }
            catch (SqlException)
            {
                throw new Exception("Falha na conexão com o banco de dados.");
            }
        }

        public void cadastrarFuncionario(string nome, string dataNascimento, string sexo, string rg, string cpf, string tipoLogradouro, string logradouro, string numero, string complemento, string bairro, string cidade, string uf, string cep, string telefone, string celular, string email, string cargo, int comissao, string login, string senha)
        {
            Funcionario f = new Funcionario();


            if (f.verificarFuncionario(cpf) == false)
            {
                ServicosDB sql = new ServicosDB();

                string strCadastrar = "INSERT INTO FUNCIONARIO VALUES ('" + nome + "', '" + dataNascimento + "', '" + sexo + "', '" + rg + "', '" + cpf + "', '" + tipoLogradouro
                    + "', '" + logradouro + "', '" + numero + "', '" + complemento + "', '" + bairro
                    + "', '" + cidade + "', '" + uf + "', '" + cep + "', '" + telefone + "', '" + celular + "', '" + email
                    + "', '" + cargo + "', '" + comissao + "', '" + login + "', '" + senha + "')";

                try
                {
                    sql.executar(strCadastrar);
                }
                catch (SqlException)
                {
                    throw new Exception("Falha na conexão com o banco de dados.");
                }
            }
            else
            {
                throw new Exception("Funcionário já cadastrado.");
            }
        }

        public bool verificarFuncionario(string cpf)
        {
            ServicosDB sql = new ServicosDB();
            string strConsultar = "SELECT * FROM FUNCIONARIO WHERE funCPF = '" + cpf + "'";
            SqlDataReader rsFuncionario;

            try
            {
                rsFuncionario = sql.recordSet(strConsultar);
            }
            catch (SqlException)
            {
                throw new Exception("Falha na conexão com o banco de dados.");
            }

            if (rsFuncionario.HasRows)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public Funcionario efetuarLogin(string login, string senha)
        {
            ServicosDB sql = new ServicosDB();
            string strLogin = "SELECT * FROM FUNCIONARIO WHERE funLogin = '" + login + "' AND funSenha = '" + senha + "'";
            SqlDataReader rsFuncionario;

            try
            {
                rsFuncionario = sql.recordSet(strLogin);
            }
            catch (SqlException)
            {
                throw new Exception("Falha na conexão com o banco de dados.");
            }

            if (rsFuncionario.HasRows)
            {
                while (rsFuncionario.Read())
                {
                    this.FunCod = (int)rsFuncionario["funCod"];
                    this.FunLogin = rsFuncionario["funLogin"].ToString();
                    this.FunSenha = rsFuncionario["funSenha"].ToString();
                    this.FunNome = rsFuncionario["funNome"].ToString();
                    return this;
                }
            }
                return null;
        }
    }
}